package quick.portal.service;

import java.io.File;

import quick.common.AppManager;
import quick.portal.activity.MainActivity;
import android.app.DownloadManager;
import android.app.DownloadManager.Request;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Environment;
import android.os.IBinder;

public class AppUpdateService extends Service {

	/** 安卓系统下载类 **/  
    private DownloadManager manager;
  
    /** 接收下载完的广播 **/  
    private DownloadCompleteReceiver receiver;
    
    
    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
    	String url = intent.getStringExtra("Url");
        String appName = intent.getStringExtra("AppName");
        
    	// 调用下载
    	initDownManager(url,appName);
    	
    	return super.onStartCommand(intent, flags, startId);
    }
    
    @Override
    public IBinder onBind(Intent intent)
    {
    	return null;  
    }
    
    @Override
    public void onDestroy() {
  
        // 注销下载广播
        if (receiver != null)
        {
        	unregisterReceiver(receiver);
        }
        
        super.onDestroy();
    }
    
    /** 初始化下载器 **/  
    private void initDownManager(String url,String appName)
    {
        manager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
        
        receiver = new DownloadCompleteReceiver();
        
        //设置下载地址
        DownloadManager.Request down = new DownloadManager.Request(Uri.parse(url));
          
        // 设置允许使用的网络类型，这里是移动网络和wifi都可以
        down.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE|DownloadManager.Request.NETWORK_WIFI);  
          
        // 下载时，通知栏显示途中
        down.setNotificationVisibility(Request.VISIBILITY_VISIBLE);
          
        // 显示下载界面 
        down.setVisibleInDownloadsUi(true);
        
        String filePath = Environment.getExternalStorageDirectory()+"/" + Environment.DIRECTORY_DOWNLOADS + "/";
        File f = new File(filePath);
        if(!f.exists())
        {
        	f.mkdir();
        }

        // 设置下载后文件存放的位置 
        down.setDestinationInExternalFilesDir(this,Environment.DIRECTORY_DOWNLOADS, appName);
        

        // 将下载请求放入队列
        manager.enqueue(down);
          
        //注册下载广播
        registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));  
    }
    
    // 接受下载完成后的intent
    class DownloadCompleteReceiver extends BroadcastReceiver {
          
        @Override  
        public void onReceive(Context context, Intent intent) {

            //判断是否下载完成的广播 
            if (intent.getAction().equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE))
            {
                //获取下载的文件id
                long downId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
                  
                //自动安装apk
                installAPK(manager.getUriForDownloadedFile(downId));
                  
                //停止服务并关闭广播  
                AppUpdateService.this.stopSelf();
  
            }
        }

        /**
         * 安装apk文件
         */
        private void installAPK(Uri apk)
        {
            // 通过Intent安装APK文件
            Intent intents = new Intent();
            intents.setAction(Intent.ACTION_VIEW);
            intents.setDataAndType(apk,"application/vnd.android.package-archive");
            
            AppManager.getAppManager().getActivity(MainActivity.class).startActivity(intents);
  
        }
    }
}
